/**
 * 环境配置文件
 * 根据当前环境自动配置API地址和其他设置
 */

// 环境检测
function detectEnvironment() {
    const hostname = window.location.hostname;
    const port = window.location.port;
    
    // 开发环境
    if (hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '0.0.0.0') {
        return 'development';
    }
    
    // 局域网IP地址也视为开发环境
    if (isLocalNetworkIP(hostname)) {
        return 'development';
    }
    
    // 测试环境
    if (hostname.includes('test') || hostname.includes('staging') || hostname.includes('dev')) {
        return 'staging';
    }
    
    // 生产环境
    return 'production';
}

// 检查是否为局域网IP地址
function isLocalNetworkIP(hostname) {
    // 检查是否为IP地址格式
    const ipRegex = /^(\d{1,3}\.){3}\d{1,3}$/;
    if (!ipRegex.test(hostname)) {
        return false;
    }
    
    // 检查是否为私有IP地址范围
    const parts = hostname.split('.').map(Number);
    
    // 10.0.0.0 - 10.255.255.255
    if (parts[0] === 10) {
        return true;
    }
    
    // 172.16.0.0 - 172.31.255.255
    if (parts[0] === 172 && parts[1] >= 16 && parts[1] <= 31) {
        return true;
    }
    
    // 192.168.0.0 - 192.168.255.255
    if (parts[0] === 192 && parts[1] === 168) {
        return true;
    }
    
    // 169.254.0.0 - 169.254.255.255 (链路本地地址)
    if (parts[0] === 169 && parts[1] === 254) {
        return true;
    }
    
    return false;
}

// 获取API基础URL
function getApiBaseUrl() {
    // 固定后端端口方案：前端8080，后端HTTPS服务在9001端口    // 同源端口方案：前端与后端使用同一主机与端口
    const { protocol, hostname, port } = window.location;
    const portPart = port ? `:${port}` : '';
    return `${protocol}//${hostname}${portPart}`;

    // return `https://localhost:9001`;
}

// 导出环境配置
export const ENV_CONFIG = {
    environment: detectEnvironment(),
    apiBaseUrl: getApiBaseUrl(),
    apiPrefix: '/api',
    
    // 获取完整API URL
    getApiUrl(endpoint = '') {
        if (endpoint && !endpoint.startsWith('/')) {
            endpoint = '/' + endpoint;
        }
        return `${this.apiBaseUrl}${this.apiPrefix}${endpoint}`;
    },
    
    // 获取音频文件URL
    getAudioUrl(filename) {
        return `${this.apiBaseUrl}/audio/${filename}`;
    },
    
    // 获取健康检查URL
    getHealthUrl() {
        return `${this.apiBaseUrl}/health`;
    },
    
    // 是否为开发环境
    isDevelopment() {
        return this.environment === 'development';
    },
    
    // 是否为生产环境
    isProduction() {
        return this.environment === 'production';
    }
};

// 在控制台输出当前环境信息（仅开发环境）
if (ENV_CONFIG.isDevelopment()) {
    console.log('🔧 环境配置:', {
        environment: ENV_CONFIG.environment,
        apiBaseUrl: ENV_CONFIG.apiBaseUrl,
        apiUrl: ENV_CONFIG.getApiUrl(),
        healthUrl: ENV_CONFIG.getHealthUrl()
    });
}

export default ENV_CONFIG;